package dao.impl;

import dao.UsuarioDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.ArrayList;
import java.util.List;
import modelo.Usuario;

public class MemoryUsuarioDAO implements UsuarioDAO {

    private ArrayList<Usuario> lista;
    private long seq;

    public MemoryUsuarioDAO() {
        lista = new ArrayList<Usuario>();
        seq = 0;
    }

    public long inclui(Usuario umUsuario) throws ObjetoDuplicadoException {

        for (Usuario usuario : lista) {
            if (usuario.equals(umUsuario)) {
                throw new ObjetoDuplicadoException();
            }
        }
        umUsuario.setId(++seq);
        return seq;

    }

    public void altera(Usuario umUsuario)
            throws ObjetoNaoEncontradoException {
        boolean achou = false;

        for (Usuario usuario : lista) {
            if (usuario.igual(umUsuario)) {
                umUsuario.setId(usuario.getId());
                lista.remove(usuario);
                lista.add(umUsuario);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }
    }

    public void exclui(Usuario umUsuario)
            throws ObjetoNaoEncontradoException {
        if (!lista.remove(umUsuario)) {
            throw new ObjetoNaoEncontradoException();
        }
    }

    public Usuario recuperaUmUsuario(long id) throws ObjetoNaoEncontradoException {
        Usuario umUsuario = new Usuario();
        umUsuario.setId(id);
        for (Usuario usuario : lista) {
            if (usuario.igual(umUsuario)) {
                return usuario;
            }
        }

        throw new ObjetoNaoEncontradoException();
    }

    public List<Usuario> recuperaUsuarios() {
        return lista;
    }

    public Usuario valida(String login, String senha) {
        Usuario umUsuario = new Usuario();
        umUsuario.setLogin(login);
        umUsuario.setSenha(senha);

        return umUsuario;

    }
}
